#ifndef LUN_H_
#define LUN_H_

#include <set>

typedef unsigned long int LUNID;			// u64 is unsigned long (64 bit unsigned)

class Lun {
	LUNID m_uid;
	int priorityGroup;
	float priority;
	float desired_response_time;			// response_time desired for this lun
	double ssdPercent;
	double fcPercent;
	double sataPercent;
	

public:
	Lun (){};
	Lun (LUNID uid, double ssd, double fc, double sata, double prio) { 
		m_uid = uid; ssdPercent=ssd; fcPercent=fc; sataPercent=sata; 
		priority = prio; desired_response_time = 5; priorityGroup = 1; 
	};
	LUNID getM_uid() { return m_uid; };
	double getSsdPercent() { return ssdPercent; };
	double getFcPercent() { return fcPercent; };
	double getSataPercent() { return sataPercent; };
	Lun& operator= (Lun const &l);
	void setDRT (double t) { desired_response_time = t; };  // set desired_response_time
	double getDRT () { return desired_response_time; };
	double calc_damage(double response_time);
	void setPriority (double prio);
	double getPriority () { return priority; };
	void divide_priority();
	void setPriorityGroup(int pg){priorityGroup = pg;};
	int getPriorityGroup(){return priorityGroup;};
	void divide_priority_3_groups(); // give this LUN static priority according to priority group
};
#endif	/* LUN_H_ */
